package com.example.synccenter.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Redisson配置类，用于配置Redis分布式锁客户端。
 * 支持单节点Redis服务器连接配置。
 */
@Configuration
public class RedissonConfig {

    /**
     * Redis服务器主机地址
     */
    @Value("${spring.redis.host}")
    private String redisHost;

    /**
     * Redis服务器端口
     */
    @Value("${spring.redis.port}")
    private String redisPort;

    /**
     * Redis数据库索引
     */
    @Value("${spring.redis.database}")
    private int database;

    /**
     * Redis服务器密码
     */
    @Value("${spring.redis.password}")
    private String password;

    /**
     * 创建Redisson客户端Bean
     * 配置单节点模式，使用JSON序列化
     * @return RedissonClient实例
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redissonClient() {
        Config config = new Config();
        // 单节点配置
        config.useSingleServer()
                .setAddress("redis://" + redisHost + ":" + redisPort)
                .setDatabase(database)
                .setPassword(password);
        // 使用JsonJacksonCodec作为序列化
        config.setCodec(new org.redisson.codec.JsonJacksonCodec());
        return Redisson.create(config);
    }
}